package com.lagou.edu.factory;

import com.lagou.edu.factory.parsing.*;

/**
 * @author 应癫
 *
 * 工厂类，生产对象（使用反射技术）
 */
public class BeanFactory {

    /**
     * 任务一：读取解析xml，通过反射技术实例化对象并且存储待用（map集合）
     * 任务二：对外提供获取实例对象的接口（根据id获取）
     */

//    private static Map<String,Object> map = new HashMap<>();  // 存储对象
//    private static String basePackage = "";
    private static BeanPool beanPool = new BeanPool();



    static {
        try {
            //使用建构者模式，对bean进行解析和组装
            //xml bean 的解析与组装
            BeanBuildDirector xmlDirector = new BeanBuildDirector(new XmlBeanBuilder());
            xmlDirector.construct(beanPool);
            //annotation bean的解析与组装
            BeanBuildDirector annotationDirector = new BeanBuildDirector(new AnnotationBeanBuilder());
            annotationDirector.construct(beanPool);
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    // 任务二：对外提供获取实例对象的接口（根据id获取）
    public static  Object getBean(String id) {
        return beanPool.getBeansMap().get(id);
    }

    public static String getBasePackage() {
        return beanPool.getBasePackage();
    }
}
